#ifndef AODV_ROUTING_TABLE_H
#define AODV_ROUTING_TABLE_H

#include "aodv_types.h"
#include <stdint.h>

// 路由表最大条目数
#define MAX_ROUTING_TABLE_ENTRIES 100

// 路由表结构体
typedef struct {
    routing_table_entry entries[MAX_ROUTING_TABLE_ENTRIES];
    int count; // 当前路由表中的条目数
} aodv_routing_table;

// 初始化路由表
void routing_table_init(aodv_routing_table *table);

// 添加或更新路由条目
// 如果路由已存在，则更新其信息（如跳数、序列号、生命周期等）
// 如果路由不存在，则添加新条目
int routing_table_add_or_update(aodv_routing_table *table, const routing_table_entry *entry);

// 查找路由条目
// 根据目的地址查找路由条目，如果找到则返回指向条目的指针，否则返回NULL
routing_table_entry* routing_table_find(aodv_routing_table *table, uint32_t dest_addr);

// 删除路由条目
// 根据目的地址删除路由条目
int routing_table_delete(aodv_routing_table *table, uint32_t dest_addr);

// 检查路由是否有效
// 根据目的地址检查路由是否有效（例如，生命周期是否过期）
int routing_table_is_valid(aodv_routing_table *table, uint32_t dest_addr);

// 打印路由表（用于调试）
void routing_table_print(const aodv_routing_table *table);

#endif // AODV_ROUTING_TABLE_H